home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / libg_261.zip / libg_261 / libg++ / tests / tBitSet.cc < prev    next >
C/C++ Source or Header  |  1994-05-11  |  5KB  |  221 lines

  1. /*
  2.  a test/demo of BitSets
  3. */
  4.  
  5. #include <assert.h>
  6.  
  7. #define tassert(ex) { cerr << #ex; \
  8.                        if ((ex)) cerr << "OK\n"; \
  9.                        else cerr << "Fail\n"; }
  10.  
  11.  
  12.  
  13. #include <BitSet.h>
  14.  
  15.  
  16. void test3S(BitSet a, BitSet b, BitSet c)
  17. {
  18. // neg
  19.   assert(~(~a) == a);
  20. // commutative
  21.   assert((a | b) ==  (b | a));
  22.   assert((a & b) ==  (b & a));
  23. // associative
  24.   assert((a | (b | c)) == ((a | b) | c));
  25.   assert((a & (b & c)) == ((a & b) & c));
  26. // distrib
  27.   assert((a & (b | c)) == ((a & b) | (a & c)));
  28.   assert((a | (b & c)) == ((a | b) & (a | c)));
  29. // absorption
  30.   assert((a & (a | b)) == a);
  31.   assert((a | (a & b)) == a);
  32. // demorgan
  33.   assert((a | b) == ~(~a & ~b));
  34.   assert((a & b) == ~(~a | ~b));
  35. // def of -
  36.   assert((a - b) == (a & ~b));
  37.   assert(((a - b) | b) == (a | b));
  38. // def of disjoint union
  39.   assert((a ^ b) == ((a | b) & ~(a & b)));
  40.   assert((a ^ b) == ((a - b) | (b - a)));
  41.  
  42.   BitSet x = a;
  43.   x &= b;
  44.   assert(x == (a & b));
  45.   x |= c;
  46.   assert(x == ((a & b) | c));
  47.   x -= a;
  48.   assert(x == (((a & b) | c) - a));
  49.   x ^= b;
  50.   assert(x == ((((a & b) | c) - a) ^ b));
  51.   assert(x.OK());
  52. }
  53.  
  54. /* This regression test found a bug in BitSetresize.
  55.    Based on a bug report from Joaquim Jorge <jorgej@avs.cs.rpi.edu>.*/
  56.  
  57. void
  58. test4()
  59. {
  60.   BitSet a;    cout << "a: " << a << endl;
  61.   a.set(1, 2); cout << "after set(1,2): " << a << endl;
  62.   a = BitSet();cout << "after copy: " << a << endl;
  63.   a.set(1);    cout << "after set(1): " << a << endl;
  64. }
  65.  
  66. int main()
  67. {
  68.   cout << "BitSet tests:\n";
  69.  
  70.   BitSet a;
  71.   cout << "a = " << a << "\n";
  72.   assert(a.OK());
  73.  
  74.   BitSet b = longtoBitSet(1024);
  75.   cout << "b = " << b << "\n";
  76.   assert(b.OK());
  77.   assert(b[10] == 1);
  78.   assert(b.count() == 1);
  79.   b[0] = b[10];
  80.   assert(b[0] == 1);
  81.   assert(b.count() == 2);
  82.  
  83.   BitSet c = atoBitSet("1010101010101010101010101010101010101010");
  84.   cout << "c = " << c << "\n";
  85.   assert(c.OK());
  86.   assert(c.count() == 20);
  87.   for (int i = 0; i < 40; i += 2)
  88.   {
  89.     assert(c[i] == 1);
  90.     assert(c[i+1] == 0);
  91.   }
  92.   for (int p = 0; p < 5; ++p)
  93.     cout << "c[" << p << "] =" << int(c[p]) << "\n";
  94.  
  95.   BitSet d = atoBitSet("0011001100110011001100110011001100110011");
  96.   cout << "d = " << d << "\n";
  97.   assert(d.OK());
  98.   assert(d.count() == 20);
  99.   assert(d.count(0) == -1);
  100.  
  101.   BitSet e = atoBitSet("1111000011110000111100001111000011110000");
  102.   cout << "e = " << e << "\n";
  103.   assert(e.OK());
  104.   assert(e.count() == 20);
  105.  
  106.   BitSet u = ~a;
  107.   cout << "u = ~a = " << u << "\n";
  108.   assert(a == ~u);
  109.  
  110.   BitSet g = ~e;
  111.   cout << "g = ~e = " << g << "\n";
  112.  
  113.   cout << "~c = " << (~c) << "\n";
  114.   cout << "c & d = " << (c & d) << "\n";
  115.   cout << "c | d = " << (c | d) << "\n";
  116.   cout << "c - d = " << (c - d) << "\n";
  117.   cout << "c ^ d = " << (c ^ d) << "\n";
  118.  
  119.   test3S(b, c, d);
  120.   test3S(a, a, a);
  121.   test3S(a, b, c);
  122.   test3S(a, c, b);
  123.   test3S(c, b, a);
  124.   test3S(c, c, c);
  125.   test3S(c, d, e);
  126.   test3S(e, d, c);
  127.  
  128.   BitSet f = b;
  129.   cout << "f = b = " << f << "\n";
  130.   f &= c;
  131.   cout << "f &= c = " << f << "\n";
  132.   f |= d;
  133.   cout << "f |= d = " << f << "\n";
  134.   f -= e;
  135.   cout << "f -= e = " << f << "\n";
  136.   f ^= u;
  137.   cout << "f ^= u = " << f << "\n";
  138.   assert(f.OK());
  139.  
  140.   assert(c != d);
  141.   assert(!(c == d));
  142.   assert(!(c < d));
  143.   assert(!(c > d));
  144.   assert(!(c <= d));
  145.   assert(!(c >= d));
  146.  
  147.  
  148.   BitSet h = d;
  149.   cout << "h = d\n:" << h << "\n";
  150.  
  151.   assert(d == h);
  152.   assert(d <= h);
  153.   assert(d >= h);
  154.   assert(!(d != h));
  155.   assert(!(d > h));
  156.   assert(!(d < h));
  157.  
  158.   h.set(0);
  159.   cout << "h.set(0):\n" << h << "\n";
  160.  
  161.   assert(!(d == h));
  162.   assert(!(d >= h));
  163.   assert(!(d > h));
  164.   assert((d != h));
  165.   assert(d <= h);
  166.   assert((d < h));
  167.  
  168.   h.set(65);
  169.   cout << "h.set(65):\n" << h << "\n";
  170.   assert(h[65] == 1);
  171.   assert(h[64] == 0);
  172.   assert(h[66] == 0);
  173.   h.clear(2);
  174.   cout << "h.clear(2):\n" << h << "\n";
  175.   assert(h[2] == 0);
  176.   assert(h[3] == 1);
  177.   assert(h[11] == 1);
  178.   h.invert(11,20);
  179.   cout << "h.invert(11,20):\n" << h << "\n";
  180.   assert(h[11] == 0);
  181.   h.set(21,30);
  182.   cout << "h.set(21,30):\n" << h << "\n";
  183.   assert(h[21] == 1);
  184.   h.clear(31,40);
  185.   cout << "h.clear(31, 40):\n" << h << "\n";
  186.   assert(h[33] == 0);
  187.   cout << "h.test(0,5) = " << h.test(0, 5) << "\n";
  188.   cout << "h.test(31,40) = " << h.test(31, 40) << "\n";
  189.  
  190.   cout << "set bits in e:\n";
  191.   for (p = e.first(); p >= 0; p = e.next(p))
  192.   {
  193.     assert(e[p] == 1);
  194.     cout << p << " ";
  195.   }
  196.   cout << "\n";
  197.  
  198.   cout << "clear bits in g (reverse order):\n";
  199.   for (p = g.last(0); p >= 0; p = g.prev(p, 0))
  200.   {
  201.     assert(g[p] == 0);
  202.     cout << p << " ";
  203.   }
  204.   cout << "\n";
  205.  
  206.   assert(a.OK());
  207.   assert(b.OK());
  208.   assert(c.OK());
  209.   assert(d.OK());
  210.   assert(e.OK());
  211.   assert(f.OK());
  212.   assert(g.OK());
  213.   assert(h.OK());
  214.  
  215.   test4();
  216.  
  217.   cout << "\nEnd of test.\n";
  218.   return 0;
  219. }
  220.  
  221.